#include "mazegenerator.h"
#include <QVector>
#include <QRandomGenerator>

MazeData mazeData;
mazegenerator::mazegenerator(QWidget *parent)
    : QWidget{parent}
{

}

MazeData mazegenerator::createRandomMaze()
{
    QRandomGenerator rand(QRandomGenerator::global()->generate());

    // 随机生成行数和列数，最大值为10
    int rows = rand.bounded(1, 11);  // 1到10之间的随机数
    int cols = rand.bounded(1, 11);  // 1到10之间的随机数

    QVector<QVector<int>> maze(rows + 2, QVector<int>(cols + 2, 0));  // 初始化迷宫，默认为0（可通行）

    for (int i = 0; i < rows + 2; ++i) {
        for (int j = 0; j < cols + 2; ++j) {
            if (i == 0 || j == 0 || i == rows + 1 || j == cols + 1) {
                maze[i][j] = 1;  // 边界设置为障碍
            }
            else {
                maze[i][j] = rand.bounded(2);  // 其他位置随机设置为0或1
            }
        }
    }

    // 设置入口和出口
    int startRow = rand.bounded(1, rows + 1);  // 入口随机行
    int startCol = rand.bounded(1, cols + 1);  // 入口随机列
    int endRow, endCol;

    do {
        endRow = rand.bounded(1, rows + 1);  // 出口随机行
        endCol = rand.bounded(1, cols + 1);  // 出口随机列
    } while (endRow == startRow && endCol == startCol);  // 确保入口和出口不重叠

    maze[startRow][startCol] = 0;  // 入口可通行
    maze[endRow][endCol] = 0;  // 出口可通行

    QPoint start(startRow, startCol);
    QPoint end(endRow, endCol);

    mazeData.maze = maze;
    mazeData.start = start;
    mazeData.end = end;

    return mazeData;
}


